package com.stefanini.pe.bbva.bp.in.bo.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.stefanini.pe.bbva.bp.in.bo.datasource.ArchivoDS;
import com.stefanini.pe.bbva.bp.in.bo.datasource.BitacoraDS;
import com.stefanini.pe.bbva.bp.in.bo.iface.BitacoraBOIface;
import com.stefanini.pe.bbva.bp.in.dao.iface.BitacoraDAOIface;
import com.stefanini.pe.bbva.bp.in.to.Bitacora;
import com.stefanini.pe.bbva.bp.in.to.Cliente;

@Service("bitacoraBO")
public class BitacoraBOImpl implements BitacoraBOIface {

	@Autowired
	private BitacoraDAOIface bitacoraDAOIface;

	public List<Bitacora> consultarBitacora(Bitacora oBitacora) throws Exception{
		return this.bitacoraDAOIface.consultarBitacora(oBitacora);
	}
	
	public List<BitacoraDS> consultarBitacoraRpt(Bitacora oBitacora) throws Exception{
		List<BitacoraDS> listaRepDs=new ArrayList<BitacoraDS>();
		BitacoraDS bitacoraDs;
		List<Bitacora> listRep=this.bitacoraDAOIface.consultarBitacoraRpt(oBitacora);
		for(Bitacora bitacora:listRep){
			bitacoraDs=new BitacoraDS();
			
			bitacoraDs.setFechaEvento(bitacora.getFechaEvento());
			bitacoraDs.setHoraFin(bitacora.getHoraFin());
			bitacoraDs.setDescripcionEvento(bitacora.getDescripcionEvento());
			bitacoraDs.setIdBitacora(bitacora.getIdBitacora());
			bitacoraDs.setDescripcionRazonContacto(bitacora.getDescripcionRazonContacto());
			bitacoraDs.setDescripcionMedioContacto(bitacora.getDescripcionMedioContacto());	
			bitacoraDs.setDescripcionLugarContacto(bitacora.getDescripcionLugarContacto());
			bitacoraDs.setDetalleContacto(bitacora.getDetalleContacto());
			bitacoraDs.setHoraFin(bitacora.getHoraFin());
			bitacoraDs.setAcuerdos(bitacora.getAcuerdos());
			bitacoraDs.setFechaProxReunion(bitacora.getFechaProxReunion());
			bitacoraDs.setHoraEvento(bitacora.getHoraEvento());
			bitacoraDs.setFechaProxReunion(bitacora.getFechaProxReunion());
			bitacoraDs.setNombreUsuarioAsesorColoca(bitacora.getNombreUsuarioAsesorColoca());
			bitacoraDs.setNombreUsuarioAsesor(bitacora.getNombreUsuarioAsesor());
			
			ArchivoDS archivo;
			List<ArchivoDS> listMostrar= new ArrayList<ArchivoDS>();
			List<Map<String, Object>> listResult=bitacoraDAOIface.consAnexoCliente(bitacora.getIdBitacora());	
		
			for(Map<String, Object> map:listResult){
				archivo=new ArchivoDS();
				archivo.setNombreArchivo((String)map.get("nomArchivo"));				
				listMostrar.add(archivo);
			}			
			bitacoraDs.setListaAnexo(listMostrar);			
			listaRepDs.add(bitacoraDs);
		}	
		
		return listaRepDs;
	}
	
	public void guardarBitacora(Bitacora bitacora) throws Exception{
		bitacoraDAOIface.guardarBitacora(bitacora);
	}
	
	public void actualizarBitacora(Bitacora bitacora) throws Exception{
		bitacoraDAOIface.actualizarBitacora(bitacora);
	}
	
	public List<Cliente> consultaClientesDeEjecutivo(String nombres,String nroDoc,String idUsuarioAsesorSelec,
			String idUsuarioAsesor) throws Exception{
		return bitacoraDAOIface.consultaClientesDeEjecutivo(nombres, nroDoc, idUsuarioAsesorSelec, idUsuarioAsesor);
	}

	public void ingresarAnexoCliente(List<Map<String, Object>> listUpload,Bitacora bitacora) throws Exception{		
		for(Map<String, Object> map:listUpload){
			Map<String,Object> param=new HashMap<String, Object>();
			param.put("in_codcliente", bitacora.getCodigoCliente());
			param.put("in_idbitacora", bitacora.getIdBitacora());
			param.put("in_idusuario", bitacora.getCodCreacion());
			param.put("in_descripcion", String.valueOf(map.get("descripcion")));			
			param.put("in_nomarchivo", String.valueOf(map.get("nombreArchivo")));
			param.put("in_archivo", map.get("archivo"));
			bitacoraDAOIface.ingresarAnexoCliente(param);			
		}	
	}	

	public Long consultarMaxId() throws Exception{
		return (bitacoraDAOIface.consultarMaxId().get(0)).getIdBitacora();
	}

	public List<Map<String, Object>> consAnexoCliente(Long idbitacora) throws Exception{
		List<Map<String, Object>> listMostrar= new ArrayList<Map<String, Object>>();
		Map<String, Object> mapMostrar;
		List<Map<String, Object>> listResult=bitacoraDAOIface.consAnexoCliente(idbitacora);		
		for(Map<String, Object> map:listResult){
			mapMostrar=new HashMap<String, Object>();
			//mapMostrar.put("item",map.get(""));
			mapMostrar.put("descripcion",map.get("descripcion"));
			mapMostrar.put("nombreArchivo", map.get("nomArchivo"));
			mapMostrar.put("archivo",map.get("archivo"));
			mapMostrar.put("seq",map.get("seq"));
			listMostrar.add(mapMostrar);
		}	
		return listMostrar;
	}
	
	public List<Map<String, Object>> consBusAnexoCliente(String codCliente,
			 Long idUsuarioAsesor,
             String fechaInicio,
			 String fechaFin,
			 String descripcion) throws Exception{
		return bitacoraDAOIface.consBusAnexoCliente(codCliente,idUsuarioAsesor,fechaInicio,fechaFin,descripcion);	
	}	
	
	public void deleteAnexoCliente(List<Map<String, Object>> listDelete) throws Exception{
		for(Map<String, Object> map : listDelete) {			
			Map<String,Object> param=new HashMap<String, Object>();
			bitacoraDAOIface.deleteAnexoCliente(((BigDecimal)map.get("seq")).toString());			
		}
	}
}
